One or more aspects relate, in general, to processing within a computing environment, and in particular, to improving such processing.
Many modern programming languages, such as Java and Python, as examples, allow an application program to instantiate a data object by simply referencing it, with no obligation to track or subsequently free the memory when it is no longer needed.
Active data objects (that is, those in use by the application) and inactive data objects (that is, those no longer needed by the application) may be intermixed in the language's memory heap, resulting in a fragmented memory space. A process, commonly known as storage reclamation or garbage collection, not only removes inactive objects from the memory heap, but also relocates active memory objects by coalescing them into more compact blocks of memory. This allows for the free memory to be combined into larger contiguous blocks that are available for subsequent use by applications.
The challenge in relocating active data objects is just that—they are active, and may be simultaneously referenced by other central processing units besides the one performing the storage reclamation. Thus, to perform storage reclamation, the execution of all application processes that may be referencing memory while storage reclamation is in progress is suspended. Depending on the number of memory relocations needed, this could cause unacceptable delays in applications.
This challenge in relocating active data objects also exists in virtual environments, in which a hypervisor may provide multiple guest virtual machines.